    What's New in ZRP 1.09?

Specific changes are noted in the lists below.

This third 1.09 release is still experimental. It extends 
the optimization of the earlier releases while fixing more 
bugs and addressing more issues. This release runs faster 
and uses less memory than vanilla, than previous ZRP 
releases, and than even other mods that change the game's 
binaries.

The second release corrected a few issues and added some 
tweaks. Decane helpfully contributed some fixes and tweaks 
he used to improve the SRP for Clear Sky.

A lot of changes under the covers were made to streamline the 
loading of the game, the game saves and the alife processing. 
Some of these changes are so extensive that mods added to 
this code base will likely need extensive tweaking to work 
with it. Some backward compatibility is left in the code, but 
many functions don't even take the same arguments, and a few 
assumptions have been made for efficiency as noted below.

In many cases the "constant" variables are replaced with the 
numbers they represent. For example, modules.stype_stalker is 
replaced with 0.

Engine constants are especially "heavy"; they take a long time 
to be fetched during script execution. In some cases they are 
now loaded as early as possible (CLSIDs can change with engine 
versions and modifications, and they are not valid constants 
at game start). 

The references to db.actor are being converted to just actor. 
This global variable will contain the same reference as 
db.actor. In instances where the actor is passed as a function 
parameter in the original game, it may be removed here. Some 
files/functions will be left as is if not used often in the 
game.

One constant that will be replaced over time is the value 
returned by db.actor:id(), which is always 0 in vanilla.

Currently, these changes will be accompanied by the original 
code in a comment. For readability, these comments should not 
be removed from the context if you edit the files.

One unexpected "feature" of faster processing is the exposure 
of race conditions. An example is the way the gulags change 
state. A camp (example: the AW mercs) can switch states from 
"camping" to "attacking" a neighboring enemy (example: the AW 
loner campsite). This is done by changing a number at one 
level (from 0 to 1 or 2 or 3, say) because conditions are right 
for the change (like the number of enemy being large enough). 
At lower levels this can trigger a "defend the camp" task for 
the loner camp, as well as throw every gulag member merc off 
his camping job and then assigning him a new "attack the 
loners" job. The problem here is that the check for "job done" 
is a simple "Is the number of attackers zero?" which said yes 
because the reassignment of attacking jobs wasn't fast enough 
after the merc campers were released from camping.

This particular race condition has an active workaround as of 
XR2 that prevents the population checks from returning zero on 
new state changes until at least one NPC/mutant takes on a job 
in the new state.

(In the future I'll consider some sort of immediate transition 
to a different job instead of firing then rehiring in the next 
event loop cycle. --Or even after lots of cycles!)

Previous ZRP optimization occurred mainly at the local code 
level. This version of ZRP is being heavily optimizing at the 
first level above that, looking at reducing system memory usage 
and code execution times. The next major ZRP revision will 
examine and possibly rewrite entire systems. (See the example 
above.)

Version 1.09 is much lighter in code execution loops and in 
actual game data created. For instance, physical objects that 
don't have an ini function associated with them are no longer 
bound ("binded") by bind_physic_object.script. This keeps 40% 
of physical objects in the Bar level from being stuffed in 
db.storage and updated via update().

And se_zones.script no longer processes anomalies for SANB 
unless they are on the same level. It was checking the entire 
game's 1344 anomalies then rechecking the anomalies for the 
level. It now checks less than a tenth that, even none for a 
couple of levels.

Event loop processing is sped up by avoiding the creation of 
unused debug tables and eliminating irrelevant data from tables 
that are used. So update() functions iterate through smaller 
lists.

Faster initialization of entities also occurs by avoiding 
repetitive checks of the same data. Fetching data from the .ltx 
files originally involved checking if the section was valid and 
if it existed in the .ltx file each time for every related 
field fetched for that section. Now it is validated only once 
for high-usage functions like NPC schemes. See modules.script 
for details on what schemes are used where.

Fixed lists that are constantly processed have been reorganized 
to move the more commonly used items to the front.

Features are subject to change, based in part on testing and 
feedback.

Changed files are noted in square brackets.  Scripts are in the 
gamedata\scripts\ subdirectory; scripts marked with (*) indicate 
changes to the corresponding optional\ files as well. You should 
also review the earlier ZRP documentation in the docs\ 
subdirectory, including other ZRP_Changes_*.txt files.



=====================================
Changes in 1.09 XR3a over ZRP 1.09 XR3
=====================================
ZRP 1.09 XR3a changes (NatVac and others as noted):

* Implemented fix for missing sr_tip icons reported by zZz1. 
  (MrSeyker, NatVac) [news_manager.script]
* Corrected agr_u entry in secret_level table (was agru).
  [news_manager.script]
* Reduced stamina value at which an available energy drink is 
  consumed via Esc F1 and zx.smart_heal(). [_z.script, zx.script]
* Adjusted historical dates to correspond to their string IDs 
  (and to dates in CoP). (English) (MrSeyker) 
  [config\text\eng\string_table_enc_zone.xml]



=====================================
Changes in 1.09 XR3 over ZRP 1.09 XR2
=====================================
ZRP 1.09 XR3 changes (NatVac and others as noted):

* Removed the gaps of silence when looped sounds repeat. (uds0)
  [ph_sound.script]
* Fixed some helicopter state persistence across saves. (castl)
  [heli_combat.script]
* Made r_str() default a string instead of number. (castl)
  [se_respawn.script]
* Fixed xr_zones.script's save()/load() functions in case mods 
  ever need them for anything (vanilla doesn't use them). (castl)
  [xr_zones.script]
* Removed duplicate chimera critical_wound_* vars. (Storm Shadow)
  [config\creatures\m_chimera.ltx]
* Changed Tolik's PDA/diary entry to reference Nimble, the 
  actual source of the flash drive information. (easy peasy)
  [config\text\eng\stable_storyline_info_escape.xml]
* Added task entry to permit the first task from Sidorovich to 
  be logged as completed in the PDA quest statistics. 
  (MrSeyker per easy peasy) [\config\misc\task_manager.ltx, 
  \config\text\eng\string_table_tasks_escape.xml]
* Tweaked doctor_meet entry; was being used by Doctor task and 
  Guide task. Repurposed unused doctor_meet_2 for Guide task.
  [config\text\eng\stable_storyline_info_escape.xml, 
  config\gameplay\storyline_info_escape.xml]
* Corrected English a tiny bit more.
  [\config\text\eng\stable_dialog_manager.xml]
* Commented out custom_data assignment for stalkers; it created 
  a useless ini based on an empty stalker_custom_data.ltx file. 
  [config\creatures\m_stalker.ltx]
* Reduced memory usage and improved processing speed for 
  more scripts. Commented out more unused vars/functions. 
  [se_respawn.script, smart_terrain_params.script, 
  xr_meet.script] 
* Deployed test hack to keep stalkers out of certain anomaly 
  fields when SANB is enabled. The hack works by increasing the 
  effective radius of a central anomaly to include other 
  anomalies as a workaround for the inability of SANB to process 
  more than one anomaly at a time. Only a couple of fields are 
  on the exclusion list currently; if this works more will be 
  added later. [se_zones.script]
* Reverted SANB's get_nearest_anomaly() function to consider all 
  anomalies on a level, not just those within 20 meters.
  [anomaly_evader.script]
* Modified XML character supplies' ammo assignments so that all 
  NPCs get a single bullet instead of a full box. This might be 
  a cause of an occasional loss of the original ammo, which in 
  turn contributed to a rare crash. The majority of instances 
  had boxes for their pistols. [character_desc_agroprom.xml, 
  character_desc_bar.xml, character_desc_darkvalley.xml, 
  character_desc_escape.xml, character_desc_garbage.xml, 
  character_desc_military.xml, character_desc_pripyat.xml, 
  character_desc_radar.xml, character_desc_simulation.xml]
* Reworked xr_kamp.script action_go_position to use msec ticks 
  instead of software timer. When a stalled NPC is detected and 
  resetJob() invoked, the remainder of the go_pos:execute() is 
  canceled to fix a race condition that arose on faster PCs that 
  left NPCs stalled (again). [xr_kamp.script]
* Updated Fox's logic to work with revised xr_kamp.script. 
  [config\misc\gulag_escape.ltx]
* Re-enabled harmonica support in xr_kamp.script. Needs external 
  support like MrSeyker's Harmonica Mod. [xr_kamp.script]
* Integrated xStream's camp cleanup, removed optional versions.
  [xr_kamp.script; obsolete optional\*\xr_kamp.script removed]
* Replaced neutral outfit/icon with monolith ones for one of the 
  MonoMartyrs per MrSeyker. 
  [config\gameplay\character_desc_simulation.xml]
* Adapted the custom spawning code to permit the random spawns 
  of mutants/npcs. [_custom_ext_zrp_mm.script]
* Reduced damage delivered by some cut mutants (please help; 
  this needs refinement). Fixed fracture's damage model which 
  made them invulnerable to bullets; camel-case name didn't 
  work. Support for their body parts is currently non-existent. 
  [in config\creatures\: m_burer.ltx, m_cat.ltx, m_chimera.ltx, 
  m_fracture.ltx]
* Implemented a different approach to fixing the missing rain 
  sound on level changes. [bind_stalker.script]
* Commented out the contents of the weather manager's update() 
  function, a useless call in vanilla/ZRP. Optimized the weather 
  manager code. It's okay to replace level_weathers.script with 
  one in a weather mod. [level_weathers.script]
* Streamlined the event loop. [bind_stalker.script]
* Guaranteed death manager's drop settings are initialized 
  before create_release_item() needs them. [bind_stalker.script,
  death_manager.script]
* Replaced level abbreviations on secrets with localized level 
  names. Fixed npc:alive() test in send_tip().
  [news_manager.script]
* The (optional, not default) smart_heal() function now checks 
  your stamina level if your health is 100%, and for stamina 
  levels 0.5 or lower will consume an energy drink if one is 
  available. [zx.script]
* If enabled, the antirad pseudo-hotkey will result in the 
  consumption of an energy drink (if available) when player's 
  stamina level is low, in addition to any needed antirad 
  application. Idea per fellow. [_z.script]
* Removed useless cam_inert assignments from optional headbob 
  settings. [config\misc\optional\effectors.ltx.*]
* Added another font option: a smaller vanilla font size.
  (MrSeyker) See the Modifier section. 
  [config\optional\fonts.ltx.MrSeyker]

Modifier configuration changes (NatVac):
* Added Fonts entry option to support a vanilla font with a 
  smaller text size. [modcfg\_ZRP.cfg, modcfg\Vanilla.cfg]
* xStream's camp cleanup support re-implemented. 
  [modcfg\Experimental_AI.cfg]
* Various configurations adapted to more accurately support 
  actual engine behavior: immunities_sect controlled by engine, 
  not config setting; the only hit_probability affecting NPCs
  is hit_probability_gd_novice in defines.ltx (again, player IS 
  NOT affected by hit_probability); hit probability drops from 
  1.0 at point-blank range to hit_probability_gd_novice at 
  hit_probability_max_dist and remains at that value thereafter. 
  [modcfg\Actor.cfg, modcfg\FirstPersonShooter.cfg]
* Documentation correspondingly changed. [modcfg\*.cfg.txt]
* Added an immersive weather scheme that modifies the weather 
  on some maps as you accomplish certain tasks in your progress 
  through the game. [modcfg\Experimental.cfg/.cfg.txt]
* Removed obsolete Weather Sound Fix. 
  [modcfg\Experimental.cfg/.cfg.txt]
* Changed secret level abbreviations to localized names. 
  [modcfg\_ZRP.cfg/.cfg.txt, modcfg\Vanilla.cfg/.cfg.txt]
* Supplied additional options to select/deselect the possible 
  spawning of MonoMartyrs and various mutants that were cut 
  from the original game. [modcfg\MonoMartyr.cfg/.cfg.txt]

Debug changes (NatVac):
* move_body_to_nearest_lc() now puts bodies at level changer 
  reject points (where you Esc J fast-travel to). this_guy() 
  now takes a boolean parameter, alive (nil is the same as 
  false -- that is, don't care if alive). [optional\z.script]
* Added some smart positioning for debug jumps to populated 
  stashes and inventory boxes. See Debug changes for XR2 
  below. [optional\z_jump.script]
* Esc D R now records the currently-visited position when 
  returning to the starting point. Use Esc D V to re-visit.
  [_z.script]


=====================================
Changes in 1.09 XR2 over ZRP 1.09 XR1
=====================================
ZRP 1.09 XR2 changes (NatVac and others as noted):

* Tweaked get_nearest_anomaly() to use one short radius for 
  detection (low processing demand) and a longer radius for 
  actual anomaly avoidance (to prevent NPC stalls after 
  successfully avoiding the nearby one). [anomaly_evader.script]
* Kept space restrictors without logic out of the updateable 
  list to reduce the update() processing (>60% reduction).
  [bind_restrictor.script]
* Prevented trade with NPCs if they are in panic mode; panic 
  causes an incomplete initialization. Also fixed the update() 
  check to see if the inventory needed to be refreshed due to a 
  switch to a different logic section. It was intended to check 
  once a real-time hour but was doing so continuously. 
  [trade_manager.script, xr_logic.script (*)]
* Stopped processing saves and loads in trade_manager.script 
  because the trade settings were ignored in trade_init(). The 
  configuration is simply re-read and the condition lists are 
  re-parsed and reset. Updates for generic traders are now 
  ignored (nothing ever changes from what is initially set on 
  session start). (NatVac, Decane) [trade_manager.script]
* Added ph_button to the exception list of schemes that don't 
  need to have their callbacks removed on scheme switch.
  [xr_logic.script (*)]
* Stopped processing of dead BTRs on Chernobyl NPP's south side. 
  [ph_car.script]
* Corrected anim iteration checks to properly decrement from 
  total anim count instead of incrementing. This stops the 
  playing guitar music when the NPC stands up. (Decane)
  [state_mgr_animation.script]
* Modified state change processing and gulag population checks 
  to prevent race condition issues like arbitrary task 
  completion due to slow re-hiring of NPCs/mutants for jobs in 
  the new state. Removed obsolete time-delay workarounds. This 
  change can affect saves; there is now a possibility that 
  a ZRP 1.09 save is not backward compatible with ZRP 1.07.
  [gulag_general.script, gulag_military.script, xr_gulag.script]
* Switched from all string_find checks to mostly string compares 
  within try_switch_to_another_section() for speed. Adjusted 
  related condlist processing. (per Decane)
  [xr_logic.script (*)]
* Fixed XR1 regression issue that let the player get away with 
  murder on the Bar level. [sr_territory.script]
* Modified prod_npc_on_hit logic to force NPCs to look your way
  when you shoot them, after a reload has them facing where you 
  were when the save was created. [xr_motivator.script (*)]
* Modified register_target() and unregister_target() in 
  task_manager.script to take another argument to speed up 
  processing. Also adjusted a couple of files that used those 
  functions. (se_item.script did not need to be adjusted.)
  [task_manager.script, se_stalker.script, smart_terrain.script]
* Access tweaks, other optimizations in various script files.
  [*.script - go by modified date between 4/17 and 6/2/2017]
* Set a timer to activate the player's weapon for the arena. 
  This will work for all the matches except the surprise one.
  [xr_effects.script]
* Player's arena inventory is no longer stored in inventory box 
  after successful matches. This should reduce stash-based lag 
  on the Bar level if you play in the arena. [xr_effects.script]
* Let the player know during his first dialog with Arnie where 
  his inventory will be after the match if he survives. 
  (English) [config\text\eng\stable_dialogs_bar.xml]
* Added xr_logic.script to the main_menu.script's validation 
  check. If xr_logic.script was not valid, any attempt to start 
  a game or load a save would hang the game. Now you will be 
  notified that xr_logic.script has a problem and will be 
  prevented from doing anything except quitting.
  [ui_main_menu.script]
* Added another "cleaner fonts" option: a smaller font size.
  (MrSeyker tweaked ZaGaR's cleaner fonts.) See the Modifier 
  section. [config\optional\fonts.ltx.ZaGaR_MrSeyker; renamed 
  config\optional\fonts.ltx to fonts.ltx.ZaGaR]

Modifier configuration changes (NatVac):
* Added Fonts entry to support a cleaner font and a cleaner 
  font with a smaller text size, as well as vanilla. 
  [modcfg\_ZRP.cfg, modcfg\Vanilla.cfg]
* Made some small text changes on tooltips to aid in deciding.
  [modcfg\_ZRP.cfg, modcfg\Actor.cfg]
* Added tip on Camera Viewpoint (player's view height) to 
  adjust Item Pickup reach as well. [modcfg\Actor.cfg, 
  modcfg\Actor.cfg.txt]
* Minor corrections/rewording on various Modifier files.
  [modcfg\*.cfg, modcfg\*.cfg.txt]

Debug changes (NatVac):
* Supplied a script to make teleporting a specific distance a 
  little easier. It uses z.jump(), re-introduced in the XR1 
  release. It has some special features to permit jumping to 
  stashes, inventory_boxes w/story_ids and those without. Copy 
  it up a directory from scripts\optional\ if you might want to 
  use it. SAVE BEFORE EACH USE! There currently is no smart 
  positioning on destination, so you could find yourself inside 
  a car or other Marked-One-mangler. (Esc D R to get back, or 
  Esc D F to jump out.) See the XR1 debug changes for more info. 
  [scripts\optional\z_jump.script]

All.spawn changes/fixes since 1.09 XR1 -- these require a new 
game, but are not critical so existing saves are okay:
* Removed four instances of "trader_flags = 0", one for an 
  Agroprom stalker and one for an RPG-wielding merc in the Wild 
  Territory, with the remaining two being the player and the 
  Cordon trader. The engine didn't quite ignore the unused flag; 
  in the first instance the stalker often didn't have ammo for 
  his weapon. [alife_l01_escape.ltx, alife_l03_agroprom.ltx, 
  alife_l06_rostok.ltx]
* A zrp107r5_zrp109xr2_spawns.diff file is included. Find it 
  in the gamedata\docs\diffs_for_modders\ subdirectory.



=====================================
Changes in 1.09 XR1 over ZRP 1.07 R5 RC
=====================================
ZRP 1.09 XR1 changes (NatVac and others as noted):

** Bug Fixes:
* Deferred deletion of ammo on NPCs at death to eliminate those 
  NOTFOUND and ge_destroy() log entries in 1.0006. This also 
  prevents the e_parent && e_entity crashes if NPC is reloading 
  when he dies. [death_manager.script]
* Corrected global var of motivation_action_manager() 
  invoked on each evaluator_state_mgr_idle_alife:evaluate() 
  call. (from Alundaio remark) [state_mgr.script]
* Gave player credit for trying if mutants killed Bullet's 
  friend AND the bandits escorting him. [xr_effects.script]
* Changed requirement for adding Yantar->AW level changer; must 
  have Scorcher task first. (Just in case you visit AW first.)
  [zlc.script]
* Removed ZRP legacy reference to the artifact swap program in 
  Skinflint's starting dialog. 
  [config\text\eng\stable_dialogs_military.xml]
* Fixed one more typo in the English localization. (More to 
  come from MrSeyker.) [text\eng\stable_task_manager.xml]
* Added activation of AW bloodsucker respawner after completing 
  Skinflint's bloodsucker task if you first talked to Skinflint
  before talking to Murk. [config\gameplay\dialogs_military.xml]
* Fixed Rostok helicopter explosion sound location.
  [bind_heli.script]
* Removed Murk spot if you killed the bloodsuckers before 
  talking to him after assigned the task by Skinflint.
  [mil_tasks.script]
* Adapted Shadows' outfit workaround so that you are always 
  properly dressed at death or in third-person view, unless 
  you are not to begin with (i.e., not wearing outfit).
  [bind_stalker.script, optional\*\bind_stalker.script]
* Adjusted code to properly handle mobile (mutant) death from 
  unknown causes. [mob_death.script, xr_conditions.script]
* Re-enabled remove_from_ranking() for those newly-dead NPCs 
  that have an assigned story_id (i.e., permabodies).
  [xr_motivator.script, optional\*\xr_motivator.script]
* Made the "rain sound on level change" fix the default. 
  [bind_stalker.script, optional\*\bind_stalker.script]
* Changed type to t_type. (AMK Team via castl)
  [xr_sound.script]
* Fixed wrong default_state_moving state assignments. (castl)
  [move_mgr.script]
* Corrected wrong logic branch references. (castl)
  [config\misc\gulag_escape.ltx]
* Added crash protection if no MM spawn_spots exist for level.
  (Actually didn't crash but corrupted subsequent saves, which 
  pops up a "corrupt save" dialog warning to load earlier save.)
  [_custom_ext_zrp_mm.script]
* Forced accelerated mental deterioration near Red Forest to 
  Pripyat level changer if the scorcher is not disabled. 
  While this transition-without-disabling-scorcher should be 
  allowed, players wouldn't see loner group in Pripyat but task 
  to follow them would still be given. [sr_psy_antenna.script]
* Added a couple of safeguards if insufficient progress 
  attained for an attempted fast-travel. You can no longer jump 
  beyond a closed Garbage Duty blockpost gate, and you are no 
  longer allowed to quick-jump to Pripyat level changer in 
  Red Forest if psy emissions are still present, which would 
  kill you as of this release. [ui_level_zip_dialog.script]
* Added a precautionary Esc J jump to Arnie if post-arena-match 
  timer somehow fails. [ui_level_zip_dialog.script]
* Checked for invalid game_vertex_id which might be one cause 
  of "there is no specified level in the game graph" errors. 
  This test may need to be deployed in other locations; please 
  report if you still get the error. [smart_terrain.script]
* Added a missing alarm state to val_lager_bandit kamp3. 
  [gulag_dark_valley.script]

** Tweaks:
* Changed use of engine clsid table to speed up functions that 
  use it. Modified other scripts to use the new global vars.
  [_g.script, anomaly_holder.script, bind_monster.script, 
  death_manager.script, gulag_dark_valley.script, 
  gulag_pripyat.script, smart_terrain.script, 
  task_manager.script, xr_conditions.script, xr_gulag.script, 
  xr_logic.script, z.script, zx.script, et alia]
* Moved "is this dead body new" check from death_manager.script 
  to xr_motivator.script to eliminate unneeded instances of the 
  drop manager. [death_manager.script, xr_motivator.script]
* Revised medkit drop (to heal NPCs) to use simpler medkit 
  release code in _dev.script. Also prevented the act of 
  storing medkits on bodies from healing nearby NPCs. 
  [_dev.script, _z.script]
* Adjusted NPC healing on master difficulty in dialog-based 
  normal medkit transfer; was only 60%, now 100%.
  [xr_wounded.script]
* Simplified level_tasks.proceed() to only call proceed() 
  function for current level. [level_tasks.script]
* The PDA has been updated a bit, although it is still a work 
  in progress. (MrSeyker, NatVac) [config\ui\*.xml]
* More optimizations and general clean-up.
  [xr_logic.script, most xr_*.script files, state_mgr_*.script]
* Removed zombie combat support for non-zombie NPCs. This could 
  break some zombifying mods; remove conditional check for 
  zombied to reenable support if needed. [xr_combat.script]
* Adjusted stealth tweak for neutrals and friends. If you kill 
  one silently but you are seen doing it or are within a 
  certain distance of his associate, you are still marked as 
  his cold-blooded killer. [xr_death.script]
* Tweaked the secrets text. [text\eng\stable_task_manager.xml]
* Added ZaGaR's fonts.ltx for better widescreen support.
  Optional; see Modifier changes. [config\fonts.ltx]
* Weakened MonoMartyrs a bit. [config\creatures\m_stalker.ltx]
* Commented out more loaded but unused code.
  [dialogs_military.script, se_stalker.script, utils.script]
* Made the attachment of grenade launcher and scope to the 
  G36/GP37 optional, non-default. See Modifier changes below.
  [config\weapons\w_g36.ltx]
* Moved db.sound table to xr_sound.db_sound for faster access 
  by the only script that really uses it.
  [sound_theme.script, xr_sound.script]
* Removed more unused sound themes from the theme table. 
  Streamlined sound loading. [sound_theme.script]
* Disabled loaded but unused TalesManager class. 
  [xr_patrol.script]
* Commented out unused stories and legends and reactions. 
  [config\misc\script_sound.ltx, optional\script_sound.ltx.ncc]
* Reworked xr_info.script to avoid creating and populating new 
  encyclopedia/story tables for each NPC. [xr_info.script]
* Stopped se_zones.script from processing all anomalies for 
  SANB, now just processes those for the current level if any. 
  Eliminated need for anomaly_holder.script. [se_zones.script, 
  anomaly_evader.script, anomaly_holder.script]
* Disabled config file processing by se_zones.script. The 
  update() functions are never called, so the loaded values 
  were never used. There are debug statements in the update() 
  code that will tell you if it starts working. (Yes, this 
  means artifact spawning occurs only at new game creation -- 
  it's an engine problem.) [se_zones.script]
* Tightened up code, eliminated unnecessary parameter passing, 
  absorbed functions into other scripts where practical.
  [mob_*.script, ph_*.script, sr_*.script, xr_*.script, etc.]
* Removed ten more unused or obsolete schemes, reworked code 
  to avoid loading otherwise-useless schemes. 
  [modules.script, above *.script]
* Reduced use of tables in db.script that were apparently 
  meant for debugging. Moved other tables to the only users. 
  [db.script, bind_physic_object.script, xr_sound.script]
* Changed add_to_binder() functions to add_to_binder_q() with 
  three fewer parameters since they were unused in all schemes. 
  NOTE that this change makes many AI mods incompatible with 
  the new approach until they are likewise adapted.
  [mob_*.script, ph_*.script, sr_*.script, xr_*.script, some
  optional\ scripts including xrs_*.script files]
* Set global 'actor' variable to db.actor value when defined. 
  Changed a lot of files to use it already. (Don't change 
  db.actor_proxy users.) [*.script]
* Made xr_spawner.script obsolete. Its check_spawn() was 
  rewritten and moved into the only two users of the function. 
  [se_car.script, se_monster.script, xr_spawner.script]
* Eliminated a populated but unused table in se_item.script.
  [se_item.script]
* Eliminated the loading of an otherwise-unused class set 
  (ce_switcher, se_switcher). This does change the numbering 
  of the CLSIDs, which is not a problem in vanilla/ZRP. 
  [class_registrator.script]
* Added a new support function for those who repeatedly start 
  new games to permit them to configure that new game somewhat 
  one the fly. See _custom_ext.script's new_game_tweaks()
  function. [bind_stalker.script, _custom_ext.script]

Modifier configuration changes (MrSeyker and NatVac):
* NPC Death Crash fix can be disabled/enabled.
  [modcfg\Experimental.cfg]
* G36/GP37 attachments can be enabled/disabled, its time_to_aim 
  can be adjusted. [modcfg\Weapons.cfg]
* Ft-200m/FN F2000 can have silencer with choice of silenced 
  shot sounds and its time_to_aim can be adjusted.
  [modcfg\Weapons.cfg]
* The "tagging" feature of binoculars can be disabled/enabled.
  [modcfg\_ZRP.cfg]
* Unique weapons can drop in perfect condition. Same tweak, 
  it just uses a different way to do it under the covers.
  [modcfg\_ZRP.cfg]
* The bleeding reduction provided by medkits can be tweaked.
  [modcfg\Tweaks.cfg]
* ZaGaR's fonts.ltx can be disabled for that vanilla 
  unreadability. [modcfg\Vanilla.cfg]
* Added movement dispersion adjustment to the actor difficulty 
  settings. [modcfg\Actor.cfg, Actor.cfg.txt]
* Added note on "bullet sponges". [FirstPersonShooter.cfg.txt]
* Updated Experimental AI configuration to accommodate changes 
  in AI scripts. [modcfg\Experimental_AI.cfg]
* Updated Sound Management configuration to accommodate changes 
  in sound table initialization. Removed simple NCC version; 
  use either NCC or vanilla sound. [modcfg\SoundManagement.cfg]
* New marking script: Mark Local. Works the same as Mark by 
  Partial Name except it only marks entities on the same level. 
  It also detects and removes objects with bad game vertex ids. 
  ["Mark NPCs and Items" entry for modcfg\SupportUtilities.cfg]

Debug changes (NatVac):
* Macro processing can now take place while debug information 
  like coordinate data or variable watch is actively displayed. 
  This permits the direct removal of the variable watch via 
  macro hotkey and better supports debugging functions.
  [_z.script, ui_main_menu.script]
* As part of the change above, the debugging information is now 
  toggled on or off via Esc D D. [_z.script]
* The z.jump(distance,height) function now uses the y component 
  of device().cam_dir as the default height adjustment if no 
  height is provided. The value of device().cam_pos.y is added 
  to cam_dir.y * distance to adjust for the height of your eyes 
  from the ground. So you can now jump to that roof in the 
  distance by turning on crosshairs, enabling "show distance" 
  in Options, then look exactly where you want to go, note the 
  distance, and without moving press Esc Z X and click in the 
  edit box. Then type "z.jump(the_distance)" (without quotes, 
  replacing the_distance with the distance you noted) and press 
  Enter to instantly teleport there. Requires ZSU enabled and 
  Execute Script Command installed. [z.script]
* A missing or invalid modules.script or scheme script file no 
  longer quits to desktop requiring the user to look at the 
  log file. It now reports the problem on the lower left of 
  the main menu and shows more info when you quit, just like a 
  bad/missing _z.script did. This will help you debug schemes. 
  [_g.script, modules.script, ui_main_menu.script]
* The zx.grab_remote_body_property() function now also works 
  in the same way as a direct search by checking for any info 
  on the body. The "smart heal" routine is a little smarter. 
  [zx.script]
* Added debug function to detect and remove entities with bad 
  game vertex values like left-over m_phantom ghosts in Red 
  Forest. [z_mark_local.script; see Modifier changes.]
* Updated some z.script functions to perform faster. You can 
  now use one of the z.this_*() functions in Variable Watch 
  with very little impact on framerate. [z.script]

All.spawn changes/fixes since R5RC -- these require a new 
game, but are not critical so existing saves are okay:
* Delayed the first bandit replacements for the Cordon auto 
  park until after you help Fox or go to the Garbage.
  [alife_l01_escape.ltx]
* Renamed Garbage's gar_zone_mincer to gar_zone_mincer_weak to 
  avoid name conflict with Pripyat's gar_zone_mincer in the 
  stadium. [alife_l02_garbage.ltx]
* Separated two metal cases that occupied the same space near 
  Chef. Moved one to the floor nearby. [alife_l07_military.ltx]
* Reworked Chef's freezer to keep it from moving and moved the 
  freezer and cans of Tourist Delight, etc. back into the SW 
  corner. [alife_l07_military.ltx]
* Locked the X18 refrigerator down. These chillers should not 
  "walk" when you open them. [alife_l04u_labx18.ltx]
* Fixed missing gunfire sr_sound in Duty vs. Freedom battle 
  after X19 in Red Forest. [alife_l10_radar.ltx]
